<?php

namespace App\Http\Controllers;

use Houdunwang\WeChat\WeChat;
use Illuminate\Http\Request;
use Modules\Wachat\Entities\Weixin;
use Modules\Wachat\Entities\Wxkeywords;
use Modules\Wachat\Entities\Wxrule;

class WechatController extends Controller
{
    public function handle(Weixin $weixin){
        $this->valid($weixin);
        //测试接收微信消息
        $instance = WeChat::instance('message');

        //关注用户扫描二维码事件
        if ($instance->isTextMsg())
        {
            //接收用户消息
            $message = $instance->Content;
            //向用户回复消息
            //通过用户发来的文字检索，是否有关键字
            //有关键字就到对应模块寻找回复，没有就回复默认值
            return $this->respons($message)?: $instance->text('你好，欢迎到来');
            //return $instance->text('你好，欢迎到来');
        }
        //菜单推送事件
        $instance = WeChat::instance('button');
        //关注用户扫描二维码事件
        if ($instance->isClickEvent()){
            //获取消息内容
            $message = $instance->getMessage();
            return $this->respons($message->EventKey);
        }
    }

    /**
     * 判断消息调用的当前模块
     * @param $message\
     */
    public function respons($message){
        if ($keyword = Wxkeywords::where('key',$message)->first()){
            //找规则数据
            $rule = Wxrule::find($keyword['rule_id']);
            //组合需要调用的类
            $class = "\Modules\\" . $rule['module'] . "\\Respons";
            //通过回调方法找到对应类的对应方法来处理微信回复
            return call_user_func_array([new $class,'handle'],[$rule]);
        }
    }


    protected function valid($weixin){
        //获取wechat.php的配置文件
        $config = include base_path('config') . '/wechat.php';
        //获取数据库中的微信配置参数
        $weixin = $weixin->pluck('value','name')->toArray();
        //合并两个数组
        $config = array_merge($config,$weixin);
        //dd($config);
        WeChat::config($config)->valid();
    }
}
